﻿      ┌─┐                                   ┌─┐
    L │*│                                 L │*│
      └┼┘                                   └┼┘
       v                                     v
   ┌────────┐                            ┌────────┐
   │ m_head │                            │ m_head │
   └───┼────┘                            └───┼────┘
<======│==========================>   <======│======>
│      v                          │   │      v      │
│    ┌─┼─┐     ┌─┬─┐     ┌─┬─┐    │   │    ┌─┼─┐    │
<===>│*│*│<===>│*│*│<===>│*│*│<===>   <===>│*│*│<===>
     ├─┴─┤     ├─┴─┤     ├─┴─┤             ├─┴─┤
     │ * │     │ * │     │ * │             │ * │
     └─┼─┘     └─┼─┘     └─┼─┘             └─┼─┘
       │         │         │                 │
      / \       / \       / \               / \
     │ 1 │     │ 2 │     │ 3 │ m_data      │ 1 │
      \_/       \_/       \_/               \_/


     L  m_head
    ┌─┐ ┌─┐
    │*┼>│x│
    └─┘ └┼┘
    ┌────┼──────────────────────────┐
    │ ┌─┬─┬─┐    ┌─┬─┬─┐    ┌─┬─┬─┐ │
    └>│ │ │*┼───>│ │ │*┼───>│ │ │*┼─┘
    ┌─┼*│.│ │<───┼*│.│ │<───┼*│.│ │<┐
    │ └─┴┼┴─┘    └─┴┼┴─┘    └─┴┼┴─┘ │
    └────┼──────────┼──────────┼────┘
         │          │          │
        / \        / \        / \
       │ 1 │      │ 2 │      │ 3 │
        \_/        \_/        \_/

==================================================

List L = new List(); // lista de números enteros

 L  m_head
┌─┐ ┌─┐
│*┼>│0│
└─┘ └─┘

==================================================

Integer data = new Integer(1);

data                   _
┌─┐                   / \
│.┼─────────────────>│ 1 │
└─┘                   \_/

==================================================

L.add( data ); >>> [ this.m_head == null ]
===>>> this.m_head = new Node( data );

                    ┌─┬─┬─┐
new Node()─────────>│ │ │0│
                    │0│0│ │
                    └─┴─┴─┘

                 >>> m_next = m_prev = this;
                  ┌─────────┐
                  │ ┌─┬─┬─┐ │
new Node()───────>└>│ │ │*┼─┘
                  ┌─┼*│0│ │<┐
                  │ └─┴─┴─┘ │
                  └─────────┘

                 >>> m_data = data;
                  ┌─────────┐
                  │ ┌─┬─┬─┐ │
                  └>│ │ │*┼─┘
                  ┌─┼*│.│ │<┐
                  │ └─┴┼┴─┘ │
                  └────┼────┘
data                   │
┌─┐                   / \
│.┼─────────────────>│ 1 │
└─┘                   \_/

==================================================

L.add( data ); >>> this.m_head = new Node( data );

 L  m_head        ┌─────────┐
┌─┐ ┌─┐           │ ┌─┬─┬─┐ │
│*┼>│x┼──────────>└>│ │ │*┼─┘
└─┘ └─┘           ┌─┼*│.│ │<┐
                  │ └─┴┼┴─┘ │
                  └────┼────┘
data                   │
┌─┐                   / \
│.┼─────────────────>│ 1 │
└─┘                   \_/

==================================================

data = new Integer(2);

data                   _
┌─┐                   / \
│.┼─────────────────>│ 2 │
└─┘                   \_/

==================================================

L.add( data ); >>> [ this.m_head != null ]
=== >>> Object ignore = new Node( data , m_head.m_prev );

                                    ┌─┬─┬─┐
new Node()─────────────────────────>│ │ │0│
                                    │0│0│ │
                                    └─┴─┴─┘

                                    >>> m_data = data;
                                    ┌─┬─┬─┐
new Node()─────────────────────────>│ │ │0│<─────this
                                    │0│.│ │
                                    └─┴┼┴─┘
data                                   │
┌─┐                                   / \
│.┼─────────────────────────────────>│ 2 │
└─┘                                   \_/

                                    >>> m_data = data;
                      prev
 L  m_head        ┌─────────┐        this
┌─┐ ┌─┐           │ ┌─┬─┬─┐ │       ┌─┬─┬─┐
│*┼>│x┼──────────>└>│ │ │*┼─┘       │ │ │0│<─────this
└─┘ └─┘           ┌─┼*│.│ │<┐       │0│.│ │
                  │ └─┴┼┴─┘ │       └─┴┼┴─┘
                  └────┼────┘          │
                       │               │
                      / \             / \
                     │ 1 │           │ 2 │<─────data
                      \_/             \_/

                      prev          >>> this.m_next = prev.m_next;
 L  m_head        ┌─────────┐<──────────────┐
┌─┐ ┌─┐           │ ┌─┬─┬─┐ │       ┌─┬─┬─┐ │
│*┼>│x┼──────────>└>│ │ │*┼─┘       │ │ │*┼─┘
└─┘ └─┘           ┌─┼*│.│ │<┐       │0│.│+│<────this
                  │ └─┴┼┴─┘ │       └─┴┼┴─┘
                  └────┼────┘          │
                       │               │
                      / \             / \
                     │ 1 │           │ 2 │<─────data
                      \_/             \_/

                      prev          >>> this.m_prev = prev;
 L  m_head        ┌─────────┐<──────────────┐
┌─┐ ┌─┐           │ ┌─┬─┬─┐ │       ┌─┬─┬─┐ │
│*┼>│x┼──────────>└>│ │ │*┼─┘       │+│ │*┼─┘
└─┘ └─┘           ┌─┼*│.│ │<┐<──────┼*│.│ │<────this
                  │ └─┴┼┴─┘ │       └─┴┼┴─┘
                  └────┼────┘          │
                       │               │
                      / \             / \
                     │ 1 │           │ 2 │<─────data
                      \_/             \_/

                      prev          >>> prev.m_next = this;
 L  m_head        ┌──────────<──────────────┐
┌─┐ ┌─┐           │ ┌─┬─┬─┐         ┌─┬─┬─┐ │
│*┼>│x┼──────────>└>│ │ │*┼────────>│ │ │*┼─┘
└─┘ └─┘           ┌─┼*│.│+│<┐<──────┼*│.│ │<────this
                  │ └─┴┼┴─┘ │       └─┴┼┴─┘
                  └────┼────┘          │
                       │               │
                      / \             / \
                     │ 1 │           │ 2 │<─────data
                      \_/             \_/

                      prev          >>> m_next.m_prev = this;
 L  m_head        ┌──────────<──────────────┐
┌─┐ ┌─┐           │ ┌─┬─┬─┐         ┌─┬─┬─┐ │
│*┼>│x┼──────────>└>│+│ │*┼────────>│ │ │*┼─┘
└─┘ └─┘           ┌─┼*│.│ │<────────┼*│.│ │<┐<──this
                  │ └─┴┼┴─┘         └─┴┼┴─┘ │
                  └────┼───────────────┼────┘
                       │               │
                      / \             / \
                     │ 1 │           │ 2 │<─────data
                      \_/             \_/

==================================================

 L  m_head
┌─┐ ┌─┐
│*┼>│*│
└─┘ └┼┘
┌────┼──────────────────────────┐
│ ┌─┬─┬─┐    ┌─┬─┬─┐    ┌─┬─┬─┐ │
└>│ │ │*┼───>│ │ │*┼───>│ │ │*┼─┘
┌─┼*│.│ │<───┼*│.│ │<───┼*│.│ │<┐
│ └─┴┼┴─┘    └─┴┼┴─┘    └─┴┼┴─┘ │
└────┼──────────┼──────────┼────┘
     │          │          │
    / \        / \        / \
   │ 1 │      │ 2 │      │ 3 │
    \_/        \_/        \_/

==================================================